home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 27 / CU Amiga Magazine's Super CD-ROM 27 (1998)(EMAP Images)(GB)[!][issue 1998-10].iso / CUCD / Programming / BlitzC2P / DemoB030.ascii < prev    next >
Text File  |  1998-08-01  |  13KB  |  707 lines

  1. WBStartup
  2. NoCli
  3.  
  4. #c2pBPLX=320 ; chunky operation width
  5. #c2pBPLY=240 ; chunky operation height
  6. #planeheight=240 ; planar display height, must not be smaller than c2pBPLY
  7. #c2pBPLSIZE=(#c2pBPLX*#planeheight)/8
  8.  
  9. #scrwidth=#c2pBPLX
  10. #scrheight=#c2pBPLY
  11.  
  12. #iterations=40 ; iterations to test the addition of each set of objects (not total)
  13.  
  14. objcount.l=10 ; number of objects (must be greater than 0) to start with
  15. #maxobjcount=3000 ; maximum number of objects to do (must be greater than objcount!)
  16. #targetfps=25 ; number of frames per second you want to run at
  17. #objmasking=1 ; Nonzero=masking
  18. #objadd=10 ; number of objects to add each time
  19.  
  20. #objwidth=16 ; minimum of 8
  21. #objheight=16 ; minimum of 1
  22. #objlongwidth=#objwidth/4
  23.  
  24. #clearscreento=$00000000
  25.  
  26. ; c2p1x1_8_c5
  27. ;
  28. ; 132% on 040-25
  29.  
  30. Statement c2p030onlyinit{A.l,B.l}
  31.  
  32.   ;A.l=d0=Width.w
  33.   ;B.l=d1=Height.w
  34.  
  35. ; d0.w  chunkyx [chunky-pixels]
  36. ; d1.w  chunkyy [chunky-pixels]
  37. ; d2.w  (scroffsx) [screen-pixels]
  38. ; d3.w  scroffsy [screen-pixels]
  39. ; d4.w  (rowlen) [bytes] -- offset between one row and the next in a bpl
  40. ; d5.l  (c2pBPLSIZE) [bytes] -- offset between one row in one bpl and the next bpl
  41.  
  42.   MOVEQ.l #0,d2
  43.   MOVEQ.l #0,d3
  44.   MOVE.l  #c2pBPLX/8,d4
  45.   MOVE.l  d4,d5
  46.   MULU    d1,d5
  47.  
  48.   LEA c2p_datanew(pc),a0
  49.   ANDI.l  #$ffff,d0
  50.   MULU.w  d0,d3
  51.   LSR.l #3,d3
  52.   MOVE.l  d3,c2p_scroffs-c2p_data(a0)
  53.   MULU.w  d0,d1
  54.   MOVE.l  d1,c2p_pixels-c2p_data(a0)
  55. AsmExit
  56. End Statement
  57.  
  58. Statement c2p030only{A.l,B.l}
  59.  
  60.   MOVE.l  d0,a0 ; Chunky
  61.   MOVE.l  d1,a1 ; Planar
  62.  
  63. ; a0  c2pscreen
  64. ; a1  bitplanes
  65.  
  66. c2p1x1_8_c5
  67.   MOVEM.l a2-a6,-(a7)
  68.  
  69.   MOVEM.l a0-a1,-(a7)
  70.   LEA c2p_datanew,a0
  71.   LEA c2p_data,a1
  72.   MOVEQ #16-1,d0
  73. _copy: MOVE.l  (a0)+,(a1)+
  74.   DBF d0,_copy
  75.   MOVEM.l (a7)+,a0-a1
  76.   LEA c2p_data(pc),a2
  77.  
  78.   MOVE.l  #$33333333,d5
  79.   MOVE.l  #$55555555,d6
  80.   MOVE.l  #$00ff00ff,a6
  81.  
  82.   ADD.w #c2pBPLSIZE,a1
  83.   ADD.l c2p_scroffs-c2p_data(a2),a1
  84.  
  85.   MOVE.l  c2p_pixels-c2p_data(a2),a2
  86.   ADD.l a0,a2
  87.   CMP.l a0,a2
  88.   BEQ _none
  89.  
  90.   MOVEM.l a0-a1,-(a7)
  91.  
  92.   MOVE.l  (a0),d0
  93.   MOVE.l  #clearscreento,(a0)+
  94.   MOVE.l  (a0),d2
  95.   MOVE.l  #clearscreento,(a0)+
  96.   MOVE.l  (a0),d1
  97.   MOVE.l  #clearscreento,(a0)+
  98.   MOVE.l  (a0),d3
  99.   MOVE.l  #clearscreento,(a0)+
  100.  
  101.   MOVE.l  #$0f0f0f0f,d4   ; Merge 4x1, part 1
  102.   AND.l d4,d0
  103.   AND.l d4,d2
  104.   LSL.l #4,d0
  105.   OR.l  d2,d0
  106.  
  107.   AND.l d4,d1
  108.   AND.l d4,d3
  109.   LSL.l #4,d1
  110.   OR.l  d3,d1
  111.  
  112.   MOVE.l  d1,a3
  113.  
  114.   MOVE.l  (a0),d2
  115.   MOVE.l  #clearscreento,(a0)+
  116.   MOVE.l  (a0),d1
  117.   MOVE.l  #clearscreento,(a0)+
  118.   MOVE.l  (a0),d3
  119.   MOVE.l  #clearscreento,(a0)+
  120.   MOVE.l  (a0),d7
  121.   MOVE.l  #clearscreento,(a0)+
  122.  
  123.   AND.l d4,d2     ; Merge 4x1, part 2
  124.   AND.l d4,d1
  125.   LSL.l #4,d2
  126.   OR.l  d1,d2
  127.  
  128.   AND.l d4,d3
  129.   AND.l d4,d7
  130.   LSL.l #4,d3
  131.   OR.l  d7,d3
  132.  
  133.   MOVE.l  a3,d1
  134.  
  135.   MOVE.w  d2,d7     ; Swap 16x2
  136.   MOVE.w  d0,d2
  137.   SWAP  d2
  138.   MOVE.w  d2,d0
  139.   MOVE.w  d7,d2
  140.  
  141.   MOVE.w  d3,d7
  142.   MOVE.w  d1,d3
  143.   SWAP  d3
  144.   MOVE.w  d3,d1
  145.   MOVE.w  d7,d3
  146.  
  147.   BRA _start1
  148. _x1
  149.   MOVE.l  (a0),d0
  150.   MOVE.l  #clearscreento,(a0)+
  151.   MOVE.l  (a0),d2
  152.   MOVE.l  #clearscreento,(a0)+
  153.   MOVE.l  (a0),d1
  154.   MOVE.l  #clearscreento,(a0)+
  155.   MOVE.l  (a0),d3
  156.   MOVE.l  #clearscreento,(a0)+
  157.  
  158.   MOVE.l  d7,c2pBPLSIZE(a1)
  159.  
  160.   MOVE.l  #$0f0f0f0f,d4   ; Merge 4x1, part 1
  161.   AND.l d4,d0
  162.   AND.l d4,d2
  163.   LSL.l #4,d0
  164.   OR.l  d2,d0
  165.  
  166.   AND.l d4,d1
  167.   AND.l d4,d3
  168.   LSL.l #4,d1
  169.   OR.l  d3,d1
  170.  
  171.   MOVE.l  d1,a3
  172.  
  173.   MOVE.l  (a0),d2
  174.   MOVE.l  #clearscreento,(a0)+
  175.   MOVE.l  (a0),d1
  176.   MOVE.l  #clearscreento,(a0)+
  177.   MOVE.l  (a0),d3
  178.   MOVE.l  #clearscreento,(a0)+
  179.   MOVE.l  (a0),d7
  180.   MOVE.l  #clearscreento,(a0)+
  181.  
  182.   MOVE.l  a4,(a1)+
  183.  
  184.   AND.l d4,d2     ; Merge 4x1, part 2
  185.   AND.l d4,d1
  186.   LSL.l #4,d2
  187.   OR.l  d1,d2
  188.  
  189.   AND.l d4,d3
  190.   AND.l d4,d7
  191.   LSL.l #4,d3
  192.   OR.l  d7,d3
  193.  
  194.   MOVE.l  a3,d1
  195.  
  196.   MOVE.w  d2,d7     ; Swap 16x2
  197.   MOVE.w  d0,d2
  198.   SWAP  d2
  199.   MOVE.w  d2,d0
  200.   MOVE.w  d7,d2
  201.  
  202.   MOVE.w  d3,d7
  203.   MOVE.w  d1,d3
  204.   SWAP  d3
  205.   MOVE.w  d3,d1
  206.   MOVE.w  d7,d3
  207.  
  208.   MOVE.l  a5,-c2pBPLSIZE-4(a1)
  209. _start1
  210.   MOVE.l  a6,d4
  211.  
  212.   MOVE.l  d2,d7     ; Swap 2x2
  213.   LSR.l #2,d7
  214.   EOR.l d0,d7
  215.   AND.l d5,d7
  216.   EOR.l d7,d0
  217.   LSL.l #2,d7
  218.   EOR.l d7,d2
  219.  
  220.   MOVE.l  d3,d7
  221.   LSR.l #2,d7
  222.   EOR.l d1,d7
  223.   AND.l d5,d7
  224.   EOR.l d7,d1
  225.   LSL.l #2,d7
  226.   EOR.l d7,d3
  227.  
  228.   MOVE.l  d1,d7
  229.   LSR.l #8,d7
  230.   EOR.l d0,d7
  231.   AND.l d4,d7
  232.   EOR.l d7,d0
  233.   LSL.l #8,d7
  234.   EOR.l d7,d1
  235.  
  236.   MOVE.l  d1,d7
  237.   LSR.l #1,d7
  238.   EOR.l d0,d7
  239.   AND.l d6,d7
  240.   EOR.l d7,d0
  241.   MOVE.l  d0,c2pBPLSIZE*2(a1)
  242.   ADD.l d7,d7
  243.   EOR.l d1,d7
  244.  
  245.   MOVE.l  d3,d1
  246.   LSR.l #8,d1
  247.   EOR.l d2,d1
  248.   AND.l d4,d1
  249.   EOR.l d1,d2
  250.   LSL.l #8,d1
  251.   EOR.l d1,d3
  252.  
  253.   MOVE.l  d3,d1
  254.   LSR.l #1,d1
  255.   EOR.l d2,d1
  256.   AND.l d6,d1
  257.   EOR.l d1,d2
  258.   ADD.l d1,d1
  259.   EOR.l d1,d3
  260.  
  261.   MOVE.l  d2,a4
  262.   MOVE.l  d3,a5
  263.  
  264.   CMPA.l  a0,a2
  265.   BNE _x1
  266.  
  267.   MOVE.l  d7,c2pBPLSIZE(a1)
  268.   MOVE.l  a4,(a1)+
  269.   MOVE.l  a5,-c2pBPLSIZE-4(a1)
  270.  
  271.   MOVEM.l (a7)+,a0-a1
  272.   ADD.l #c2pBPLSIZE*4,a1
  273.  
  274.   MOVE.l  (a0),d0
  275.   MOVE.l  #clearscreento,(a0)+
  276.   MOVE.l  (a0),d2
  277.   MOVE.l  #clearscreento,(a0)+
  278.   MOVE.l  (a0),d1
  279.   MOVE.l  #clearscreento,(a0)+
  280.   MOVE.l  (a0),d3
  281.   MOVE.l  #clearscreento,(a0)+
  282.  
  283.   MOVE.l  #$f0f0f0f0,d4   ; Merge 4x1, part 1
  284.   AND.l d4,d0
  285.   AND.l d4,d2
  286.   LSR.l #4,d2
  287.   OR.l  d2,d0
  288.  
  289.   AND.l d4,d1
  290.   AND.l d4,d3
  291.   LSR.l #4,d3
  292.   OR.l  d3,d1
  293.  
  294.   MOVE.l  d1,a3
  295.  
  296.   MOVE.l  (a0),d2
  297.   MOVE.l  #clearscreento,(a0)+
  298.   MOVE.l  (a0),d1
  299.   MOVE.l  #clearscreento,(a0)+
  300.   MOVE.l  (a0),d3
  301.   MOVE.l  #clearscreento,(a0)+
  302.   MOVE.l  (a0),d7
  303.   MOVE.l  #clearscreento,(a0)+
  304.  
  305.   AND.l d4,d2     ; Merge 4x1, part 2
  306.   AND.l d4,d1
  307.   LSR.l #4,d1
  308.   OR.l  d1,d2
  309.  
  310.   AND.l d4,d3
  311.   AND.l d4,d7
  312.   LSR.l #4,d7
  313.   OR.l  d7,d3
  314.  
  315.   MOVE.l  a3,d1
  316.  
  317.   MOVE.w  d2,d7     ; Swap 16x2
  318.   MOVE.w  d0,d2
  319.   SWAP  d2
  320.   MOVE.w  d2,d0
  321.   MOVE.w  d7,d2
  322.  
  323.   MOVE.w  d3,d7
  324.   MOVE.w  d1,d3
  325.   SWAP  d3
  326.   MOVE.w  d3,d1
  327.   MOVE.w  d7,d3
  328.  
  329.   BRA _start2
  330. _x2
  331.   MOVE.l  (a0),d0
  332.   MOVE.l  #clearscreento,(a0)+
  333.   MOVE.l  (a0),d2
  334.   MOVE.l  #clearscreento,(a0)+
  335.   MOVE.l  (a0),d1
  336.   MOVE.l  #clearscreento,(a0)+
  337.   MOVE.l  (a0),d3
  338.   MOVE.l  #clearscreento,(a0)+
  339.  
  340.   MOVE.l  d7,c2pBPLSIZE(a1)
  341.  
  342.   MOVE.l  #$f0f0f0f0,d4   ; Merge 4x1, part 1
  343.   AND.l d4,d0
  344.   AND.l d4,d2
  345.   LSR.l #4,d2
  346.   OR.l  d2,d0
  347.  
  348.   AND.l d4,d1
  349.   AND.l d4,d3
  350.   LSR.l #4,d3
  351.   OR.l  d3,d1
  352.  
  353.   MOVE.l  d1,a3
  354.  
  355.   MOVE.l  (a0),d2
  356.   MOVE.l  #clearscreento,(a0)+
  357.   MOVE.l  (a0),d1
  358.   MOVE.l  #clearscreento,(a0)+
  359.   MOVE.l  (a0),d3
  360.   MOVE.l  #clearscreento,(a0)+
  361.   MOVE.l  (a0),d7
  362.   MOVE.l  #clearscreento,(a0)+
  363.  
  364.   MOVE.l  a4,(a1)+
  365.  
  366.   AND.l d4,d2     ; Merge 4x1, part 2
  367.   AND.l d4,d1
  368.   LSR.l #4,d1
  369.   OR.l  d1,d2
  370.  
  371.   AND.l d4,d3
  372.   AND.l d4,d7
  373.   LSR.l #4,d7
  374.   OR.l  d7,d3
  375.  
  376.   MOVE.l  a3,d1
  377.  
  378.   MOVE.w  d2,d7     ; Swap 16x2
  379.   MOVE.w  d0,d2
  380.   SWAP  d2
  381.   MOVE.w  d2,d0
  382.   MOVE.w  d7,d2
  383.  
  384.   MOVE.w  d3,d7
  385.   MOVE.w  d1,d3
  386.   SWAP  d3
  387.   MOVE.w  d3,d1
  388.   MOVE.w  d7,d3
  389.  
  390.   MOVE.l  a5,-c2pBPLSIZE-4(a1)
  391. _start2
  392.   MOVE.l  a6,d4
  393.  
  394.   MOVE.l  d2,d7     ; Swap 2x2
  395.   LSR.l #2,d7
  396.   EOR.l d0,d7
  397.   AND.l d5,d7
  398.   EOR.l d7,d0
  399.   LSL.l #2,d7
  400.   EOR.l d7,d2
  401.  
  402.   MOVE.l  d3,d7
  403.   LSR.l #2,d7
  404.   EOR.l d1,d7
  405.   AND.l d5,d7
  406.   EOR.l d7,d1
  407.   LSL.l #2,d7
  408.   EOR.l d7,d3
  409.  
  410.   MOVE.l  d1,d7
  411.   LSR.l #8,d7
  412.   EOR.l d0,d7
  413.   AND.l d4,d7
  414.   EOR.l d7,d0
  415.   LSL.l #8,d7
  416.   EOR.l d7,d1
  417.  
  418.   MOVE.l  d1,d7
  419.   LSR.l #1,d7
  420.   EOR.l d0,d7
  421.   AND.l d6,d7
  422.   EOR.l d7,d0
  423.   MOVE.l  d0,c2pBPLSIZE*2(a1)
  424.   ADD.l d7,d7
  425.   EOR.l d1,d7
  426.  
  427.   MOVE.l  d3,d1
  428.   LSR.l #8,d1
  429.   EOR.l d2,d1
  430.   AND.l d4,d1
  431.   EOR.l d1,d2
  432.   LSL.l #8,d1
  433.   EOR.l d1,d3
  434.  
  435.   MOVE.l  d3,d1
  436.   LSR.l #1,d1
  437.   EOR.l d2,d1
  438.   AND.l d6,d1
  439.   EOR.l d1,d2
  440.   ADD.l d1,d1
  441.   EOR.l d1,d3
  442.  
  443.   MOVE.l  d2,a4
  444.   MOVE.l  d3,a5
  445.  
  446.   CMPA.l  a0,a2
  447.   BNE _x2
  448.  
  449.   MOVE.l  d7,c2pBPLSIZE(a1)
  450.   MOVE.l  a4,(a1)+
  451.   MOVE.l  a5,-c2pBPLSIZE-4(a1)
  452.  
  453. _none
  454.   MOVEM.l (a7)+,a2-a6
  455. AsmExit
  456.  
  457.   Even4
  458. c2p_data
  459. c2p_scroffs: Dc.l 0
  460. c2p_pixels: Dc.l 0
  461.   Ds.l  16
  462.   Even4
  463. c2p_datanew
  464.   Ds.l  16
  465. End Statement
  466.  
  467. Statement chunkyshape1{A.l,B.l,C.l,D.l,E.l}
  468. .chunkyshape1
  469. ;any position masked with mask data and movement table
  470.   MOVEM.l a3-a6,-(a7)
  471.   MOVE.l  d4,d7 ; object loop
  472.   SUBQ.l  #1,d7
  473.   MOVE.l  d3,a3 ; base of table
  474.   MOVE.l  d0,a4 ; store
  475.   MOVE.l  d1,a5 ; store
  476.   MOVE.l  d2,a6 ; store
  477. objloop
  478.  
  479.   MOVEQ.l #0,d3
  480.   MOVE.w  (a3),d3
  481.   MOVEQ.l #0,d5
  482.   MOVEQ.l #0,d6
  483.   MOVE.w  4(a3),d5
  484.   MOVE.w  6(a3),d6
  485.   CMP.w   #6,d3 ; x<6?
  486.   BLE     xle
  487.   CMP.w   #scrwidth-objwidth-6,d3
  488.   BLT     xskip
  489. xle
  490.   EXG.l   d5,d6
  491. xskip
  492.   EXT.l   d5
  493.   ADD.l   d5,d3
  494.   MOVE.w  d3,(a3)
  495.   MOVE.w  d5,4(a3)
  496.   MOVE.w  d6,6(a3)
  497.  
  498.   MOVEQ.l #0,d4
  499.   MOVE.w  2(a3),d4
  500.   MOVEQ.l #0,d5
  501.   MOVEQ.l #0,d6
  502.   MOVE.w  8(a3),d5
  503.   MOVE.w  10(a3),d6
  504.   CMP.w   #6,d4 ; y<6?
  505.   BLE     yle
  506.   CMP.w   #scrheight-objheight-6,d4
  507.   BLT     yskip
  508. yle
  509.   EXG.l   d5,d6
  510. yskip
  511.   EXT.l   d5
  512.   ADD.l   d5,d4
  513.   MOVE.w  d4,2(a3)
  514.   MOVE.w  d5,8(a3)
  515.   MOVE.w  d6,10(a3)
  516.  
  517.   ADD.l   #12,a3
  518.   MULU    #scrwidth,d4
  519.   MOVE.l  a4,a0 ; input
  520.   ADD.l   d3,d4
  521.   MOVE.l  a5,a2 ; mask
  522.   MOVE.l  a6,d2
  523.   ADD.l   d4,d2 ; output
  524.   MOVE.l  d2,a1 ; output
  525.   MOVE.l  #objheight-1,d2
  526.   MOVE.l  #scrwidth-objwidth,d3
  527. ;Do masked blit
  528. yloop
  529.     MOVEQ.l #objlongwidth-1,d4
  530. xloop
  531.       MOVE.l  (a2)+,d0
  532.       AND.l   d0,(a1)
  533.       MOVE.l  (a0)+,d1
  534.       OR.l    d1,(a1)+
  535.       DBRA    d4,xloop
  536.     ADD.l   d3,a1
  537.     DBRA    d2,yloop
  538.   DBRA    d7,objloop
  539.   MOVEM.l (a7)+,a3-a6
  540. AsmExit
  541. End Statement
  542.  
  543. Statement chunkyshape2{A.l,B.l,C.l,D.l,E.l}
  544. .chunkyshape2
  545. ;any position masked with mask data and movement table
  546. ;B.l is unused in this routine
  547.   MOVEM.l a3-a6,-(a7)
  548.   MOVE.l  d4,d7 ; object loop
  549.   SUBQ.l  #1,d7
  550.   MOVE.l  d3,a3 ; base of table
  551.   MOVE.l  d0,a4 ; store
  552. ;  MOVE.l  d1,a5 ; store
  553.   MOVE.l  d2,a6 ; store
  554. objloop2
  555.  
  556.   MOVEQ.l #0,d3
  557.   MOVE.w  (a3),d3
  558.   MOVEQ.l #0,d5
  559.   MOVEQ.l #0,d6
  560.   MOVE.w  4(a3),d5
  561.   MOVE.w  6(a3),d6
  562.   CMP.w   #6,d3 ; x<6?
  563.   BLE     xle2
  564.   CMP.w   #scrwidth-objwidth-6,d3
  565.   BLT     xskip2
  566. xle2
  567.   EXG.l   d5,d6
  568. xskip2
  569.   EXT.l   d5
  570.   ADD.l   d5,d3
  571.   MOVE.w  d3,(a3)
  572.   MOVE.w  d5,4(a3)
  573.   MOVE.w  d6,6(a3)
  574.  
  575.   MOVEQ.l #0,d4
  576.   MOVE.w  2(a3),d4
  577.   MOVEQ.l #0,d5
  578.   MOVEQ.l #0,d6
  579.   MOVE.w  8(a3),d5
  580.   MOVE.w  10(a3),d6
  581.   CMP.w   #6,d4 ; y<6?
  582.   BLE     yle2
  583.   CMP.w   #scrheight-objheight-6,d4
  584.   BLT     yskip2
  585. yle2
  586.   EXG.l   d5,d6
  587. yskip2
  588.   EXT.l   d5
  589.   ADD.l   d5,d4
  590.   MOVE.w  d4,2(a3)
  591.   MOVE.w  d5,8(a3)
  592.   MOVE.w  d6,10(a3)
  593.  
  594.   ADD.l   #12,a3
  595.   MULU    #scrwidth,d4
  596.   MOVE.l  a4,a0 ; input
  597.   ADD.l   d3,d4
  598. ;  MOVE.l  a5,a2 ; mask
  599.   MOVE.l  a6,d2
  600.   ADD.l   d4,d2 ; output
  601.   MOVE.l  d2,a1 ; output
  602.   MOVE.l  #objheight-1,d2
  603.   MOVE.l  #scrwidth-objwidth,d3
  604. ;Do unmasked blit
  605. yloop2
  606.     MOVEQ.l #objlongwidth-1,d4
  607. xloop2
  608.       MOVE.l  (a0)+,(a1)+
  609.       DBRA    d4,xloop2
  610.     ADD.l   d3,a1
  611.     DBRA    d2,yloop2
  612.   DBRA    d7,objloop2
  613.   MOVEM.l (a7)+,a3-a6
  614. AsmExit
  615. End Statement
  616.  
  617. .blitzprogram
  618. ; Setup
  619. InitBank 1,#scrwidth*#scrheight,$10000 ; Fastram chunky buffer
  620. InitPalette 0,256
  621. For c=1 To 255
  622.   AGAPalRGB 0,c,(c/2)+Rnd(128),(c/2)+Rnd(128),(c/2)+Rnd(128)
  623. Next c
  624. AGAPalRGB 0,0,0,0,0
  625. VWait
  626. InitBank 0,(#scrwidth*Max(#planeheight,#c2pBPLY))+1000,2|65536 ; Chipram planar buffer
  627. CludgeBitMap 0,#scrwidth,Max(#planeheight,#c2pBPLY),8,Bank(0)
  628. Screen 0,0,0,#scrwidth,Max(#planeheight,#c2pBPLY),8,0,"c2p test",0,0,0
  629. Use Palette 0
  630. VWait 50
  631.  
  632. ; chunky shape
  633. InitBank 2,#objwidth*#objheight,$10000 ; chunky shape
  634. cstep.q=256/(#objwidth*#objheight)
  635. c.q=0
  636. For o.l=0 To (#objwidth*#objheight)-1
  637.   NPokeB Bank(2)+o,255-c
  638.   c+cstep
  639. Next o
  640. If #objmasking<>0
  641.   CacheClearU_
  642.   For o.l=0 To #objwidth*#objheight
  643.     p3.l=Bank(2)+Rnd(#objwidth*#objheight)-1
  644.     NPokeB p3,$00
  645.   Next o
  646. EndIf
  647.  
  648. ; chunky mask
  649. InitBank 3,#objwidth*#objheight,$10000 ; chunky mask
  650. For o.l=0 To (#objwidth*#objheight)-1
  651.   If NPeekB(Bank(2)+o)=0 Then NPokeB Bank(3)+o,$ff Else NPokeB Bank(3)+o,$0
  652. Next o
  653.  
  654. ; movement table
  655. InitBank 5,#maxobjcount*12,$10000 ; table
  656. For o.l=0 To (#maxobjcount-1)*12 Step 12
  657.   p1.w=6+Rnd(#scrwidth-#objwidth-14)
  658.   p2.w=6+Rnd(#scrheight-#objheight-14)
  659.   NPokeW Bank(5)+o,p1
  660.   NPokeW Bank(5)+o+2,p2
  661.   Repeat:xmove.w=Rnd(3)-Rnd(6):Until xmove<>0
  662.   Repeat:ymove.w=Rnd(3)-Rnd(6):Until ymove<>0
  663.   NPokeW Bank(5)+o+4,xmove
  664.   NPokeW Bank(5)+o+6,-xmove
  665.   NPokeW Bank(5)+o+8,ymove
  666.   NPokeW Bank(5)+o+10,-ymove
  667. Next o
  668.  
  669. ; Do the c2p test
  670. c2p030onlyinit{#scrwidth,#scrheight}
  671. CacheClearU_
  672. Forbid_
  673. VWait
  674. While Joyb(0)=0
  675.   If #objmasking<>0
  676.     ResetTimer
  677.     For time=1 To #iterations
  678.       chunkyshape1{Bank(2),Bank(3),Bank(1),Bank(5),objcount}
  679.       c2p030only{Bank(1),Bank(0)} ; Convert chunky to planar
  680.     Next time
  681.     t=Ticks
  682.   Else
  683.     ResetTimer
  684.     For time=1 To #iterations
  685.       chunkyshape2{Bank(2),Bank(3),Bank(1),Bank(5),objcount}
  686.       c2p030only{Bank(1),Bank(0)} ; Convert chunky to planar
  687.     Next time
  688.     t=Ticks
  689.   EndIf
  690.   fps.q=50/(t/#iterations)
  691.   If (fps>#targetfps) AND (objcount<=(#maxobjcount-#objadd)) Then objcount+#objadd Else Goto skipwend
  692. Wend
  693. skipwend:
  694. VWait 2 : Permit_
  695. VWait 20
  696. FindScreen 0
  697. Window 0,0,11,640,100,0,"Test results for c2p",0,0
  698. WindowOutput 0
  699. NPrint "Routine performed @",#targetfps,"(",fps,")fps, doing ",objcount," ",#objwidth,"x",#objheight," objects."
  700. NPrint " "
  701. NPrint "Press mousebutton..."
  702. Free Screen 0
  703. MouseWait
  704. Free Window 0
  705. End
  706.  
  707.